/*
 * @Author: your name
 * @Date: 2021-06-07 19:18:34
 * @LastEditTime: 2021-06-16 17:33:08
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \UDP\CLIENT_\case.h
 */
#pragma once

//未登录界面选项
#define REGISTER 1          //注册
#define LOGIN 2             //登录
#define U_SHOW_PRODUCTS 3   //展示商品
#define EXIT 4              //退出

//消费者界面登录选项
#define SHOW_PRODUCTS 1	    //展示商品
#define RETRIEVE_PRODUCTS 2 //检索商品
#define ADD_CART 3		    //添加购物车
#define MODIFY_CART 4      //修改购物车
#define SHOW_CART 5		    //展示购物车
#define CREATE_ORDER 6      //生成订单
#define CHECK_BALANCE 7     //查看余额
#define RECHARGE_BALANCE 8 //充值
#define CHANGE_PASSWD 9 	//修改密码
#define LOGOUT 10           //退出登录


//商家登录界面
#define M_SHOW_PRODUCTS 1	//展示商品
#define M_RETRIEVE_PRODUCTS 2 //检索商品
#define M_ADD_PRODUCTS 3 //添加商品
#define M_MODIFY_PRODUCTS 4 //修改商品
#define M_CHECK_BALANCE 5 //查看余额
#define M_LOGOUT 6 //退出登录

//充值金额限定
#define MAX_CHARGE_NUM 99999 //最大充值金额
#define MIN_CHARGE_NUM 1     //最小充值金额

//修改商品选项
#define MODIFY_COM_NAME 1 //修改商品名称
#define MODIFY_COM_BRAND 2 //修改商品品牌
#define MODIFY_COM_CLASSIFY 3 //修改商品种类
#define MODIFY_COM_PRICE 4 //修改商品价格
#define MODIFY_COM_REMAIN 5 //修改商品剩余量
#define MODIFY_COM_OTHERS 6 //修改商品其他信息
#define MODIFY_COM_FINISHED 7 //修改商品完成



/*双方通信规定*/
//com_src
#define CLINET_SEND 0 //client发送的消息
#define SERVER_SEND 1 //server发送的消息

/*opcode*/

//--------------------初始界面-------------------------
//注册
#define _REGISTER 1
    #define _REGISTER_OK  1//允许注册
    #define _REGISTER_ERROR 0//不允许注册，用户名重复

//登录
#define _LOGIN 2
    #define _LOGIN_ERROR 0
    #define _LOGIN_CONSUMER 1
    #define _LOGIN_MERCHANT 2

//查看所有商品
#define _SHOW_ALL_COMMODITY 3

//退出系统
#define _EXIT_SYSTEM 4


//-------------------消费者登录界面---------------------------
//充值
#define _RECHARGE 5
    #define _RECHARGE_ERROR 0 //充值失败
    #define _RECHARGE_OK 1  //充值成功

//修改密码
#define _CHANGE_PASSWD 6
    #define _CHANGE_PASSWD_ERROR 0 //修改失败
    #define _CHANGE_PASSWD_OK 1  //修改成功

//查询商品
#define _QUERY_COMMODITY 7
    #define _QUERY_COMMODITY_ERROR 0 //查询失败
    #define _QUERY_COMMODITY_OK 1 //查询成功

//检索商品
#define _SEARCH_COMMODITY 8
    //检索方式
    #define SEARCH_PRICE 1
    #define SEARCH_CLASS 2
    #define SEARCH_NAME 3

//查询单个商品,一句identifier
#define _SEARCH_COM_BY_ID 9

//请求添加购物车
#define _ADD_CART 10
    #define _ADD_CART_ERROR 0
    #define _ADD_CART_OK 1

#define _MODIFY_CART 11
    #define _MODIFY_CART_ERROR 0
    #define _MODIFY_CART_OK 1

#define _CREATE_ORDER 12
    #define _CREATE_ORDER_PAY_ERROE 0
    #define _CREATE_ORDER_PAY_OK 0

#define _ADD_COMMODITY 13
    #define _ADD_COMMODITY_ERROR 0
    #define _ADD_COMMODITY_OK 1

#define _MODIFY_COMMODITY 14
    #define _MODIFY_COMMODITY_ERROR 0
    #define _MODIFY_COMMODITY_OK 1
//单个商品信息结构体
typedef struct 
{
    int identifier; //商品唯一标识
    char cname[20]; //商品名
    char brand[20]; //商品品牌
    char classify[20]; //商品类别
    double price; //商品单价
    int remain; //商品剩余数目
    int frozen; //商品冻结数目
    char others[100]; //额外信息
} commodity;

typedef struct
{
    int com_src; //表示客户端发送还是服务端发送
    int opcode; //操作码，表示执行何种操作

    /*client端*/
    char name[20]; //用户名
    char passwd[40]; //密码，建议使用MD5,32位
    char newpasswd[40]; //新密码
    double newbalance; //更新余额
    int com_index; //商品编号，查询时使用
    
    /*server返回时信息*/
    int status_code; //表示服务器对于客户端验证性消息的反馈
    int type; //用户类型
    double balance; //返回余额
    int cartnum; //购物车商品数目
    int cartIndexArray[40]; //购物车商品下标
    int indexNumArray[40]; //购物车对应商品数目

    /*涉及商品操作的信息*/
    int com_num; //商品数目
    commodity com_array[40]; //所有商品数组

    /*搜索标志*/
    int searchcode; //搜索方式码
    double min_price;//最低价格
    double max_price;//最高价格
    char classify[20]; //商品类别
    char sc_name[20]; //商品名称

    /*获得单个商品信息*/
    int identifier;

    /*单个商品的数目变化，分为正负情况*/
    int remain_num; //新的剩余数目
    int frozen_num; //新的冻结数目

    /*订单金额*/
    double order_money;
} info;